perm filename CALBOX.FAI[CMS,LCS]1 blob
sn#430688 filedate 1979-04-05 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00012 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00004 00003 Reset and interrupt vectors.
C00006 00004 INPUT WAIT. Check upflg time?
C00008 00005 CALL CLED Clear cal. and mode leds.
C00010 00006 CALJMP: JMP GETJSW
C00011 00007 CKJP:
C00013 00008 WLED: OUTB Latch A on bus.
C00015 00009 Bit spreading table
C00018 00010 GETJSW: MOVRI P,P1
C00019 00011 Alfa led message table.
C00022 00012 ("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
C00025 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
;Ram bank 0 registers.
K ← 0
I ← 1
N ← 2
T ← 3 ;Timer overflow count.
CMD ← 4 ;TBOX and JS led bits.
CMD1 ← 5 ;Alfa led message index.
OFFL ← 6 ;Alfa off timer low.
OFFH ← 7 ;High.
;Ram10-27 = Stack.
;Ram bank 1 registers.
P ← 30 ;Pots pointer.
O ← 31 ;Offset pointer.
X ← 32
Y ← 33
Z ← 34
SW0 ← 35 ;TBOX switch bits.
SW1 ← 36
SW2 ← 37
;Standard ram.
SPD ← 40 ;Speed pot.
P0 ← 41 ;Joy stick pots.
P1 ← 42
P2 ← 43
P3 ← 44
JW0 ← 45 ;T. Joy stick switch channels.
JW1 ← 46 ;P/O.
JW2 ← 47 ;TOOL.
JW3 ← 50 ;T/JS/C.
OSPD ← 51 ;Old speed pot.
OP0 ← 52 ;Joy stick offsets.
OP1 ← 53
OP2 ← 54
OP3 ← 55
OJSW ← 56 ;Old joy stick switch bits.
OCMD ← 57 ;Old led bits.
OCMD1 ← 60 ;Old alfa led index.
JSC ← 61 ;Joy stick not calib. flag.
XTAL ← =6000000 ;In hertz.
BRATE ← =9600 ;Baud rate
;TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
TBIT ← =21
TT ← 1 ;Triple throw switch port.
S ← 2 ;Scan and A/D port.
PBL ← 4 ;Push button port low.
PBH ← 5 ;Push button port high.
CEW ← 6 ;Alfa led chip enables and write port.
JS ← 7 ;Joy stick, CU, and led latch port.
;Reset and interrupt vectors.
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
DISTI ;TIMER INT VECTOR
RETR
;Power on reset.
RST: CLRA ;0 For clear cursor memory.
OUTB ;Latch bus output.
MOVI 377 ;SETUP INPUT PORTS
OUTP TT ;SPTT switches.
MOVI 77 ;P4-7, SCAN, STRT, ALE.
OUTP S
;Setup PBSW ports for input.
MOVAX PBL ;PBSW low.
MOVAX PBH ;PBSW high.
;Clear cursor memory.
MOVI 170 ;7,,10.
MOVAX CEW ;Enable all alfa leds.
SWAP ;A ← 207.
MOVAX JS ;Clear JS and CU.
;Write all alfa leds.
ANPA CEW ;NOT W
CPLA
ORPA CEW ;W
SWAP ;A ← 10,,7.
ORPA CEW ;Disable all alfa leds.
SWAP ;A0-3 ← 10.
ORPA JS ;NOT CU.
CALL CLED ;Clear leds.
CALL CALED ;Clear alfa leds.
STIMER: MOVAT ;Setup timer.
STRTT
CPLF1 ;Set alfa leds off.
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,4 ;4 = 82 ms.
CLRF0 ;Set scan flag
JF1S CKIN ;Check if alfa off.
DJNZ OFFL,CKIN ;OFFW ← OFFW - 1.
DJNZ OFFH,CKIN
CPLF1 ;Set alfa led off flag.
;INPUT WAIT. Check upflg time?
OFFSET ← TBIT/3 ;Center delay?
INWAI: JTF UPFLG ;Check if timer time out.
CKIN: JT0H INWAI ;Check for start bit.
MOVRI K,OFFSET-4 ;Center - Itime.
CENTER: DJNZ K,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
; Byte input routine
MOVRI N,11 ;# of bits -1
ILOOP: MOVRI K,TBIT-5;tBIT - tI
WAI: DJNZ K,WAI
CLRC
JT0H BITON
RORC
JMP BITOFF
BITON: CPLC
RORC
NOP
BITOFF: DJNZ N,ILOOP
ROLC ;Shift out stop bit
JCC INWAI ;Check for good stop bit.
JBS 7,BYTE1 ;Check if first or second byte.
MOVAR CMD ;Save first input byte.
JMP INWAI ;Get next byte.
BYTE1: MOVAR CMD1 ;Save second byte.
CLRA ;SPD default.
JT1H ADZRO ;Speed off.
;A/DCHAN ← SPEED.
OUTB ;Latch zero on bus.
ORPI S,200 ;ALE.
ANPI S,177 ;NOT ALE.
CALL CONVRT ;Wait for speed.
JNZ ADZRO ;Check if on and zero.
INCA ;A ← 1.
ADZRO: MOVRI K,SPD ;Save speed pot value.
MOVAM K
CALL CLED ;Clear cal. and mode leds.
MOVRA CMD ;Get mode code.
RORC ;Get cal. bit.
ANI 7 ;Zero data input to LS259.
CALL WLED ;Write mode led.
JCC CKJOY ;No calib. bit.
CLRA ;Led 0.
CALL WLED ;Write cal. led.
CKJOY:
GPOTS:
;A/D convert routines.
MOVI 1 ;Chanel 1.
OUTB ;Latch bus output.
ORPI S,200 ;ALE
ANPI S,177 ;NOT ALE.
MOVRI P,P0 ;JS pot index.
MOVRI N,10 ;# of pots + switch channels.
ADLOOP: MOVI 370
ANPA JS
MOVRA N
DECA
ORPA JS
CALL CONVRT ;Wait for A/D.
MOVAM P ;Ram(p) ← Pots&sws(p).
INCR P ;Next pot.
DJNZ N,ADLOOP ;Next channel.
;Check for scan flag.
CKSCAN: JF0S CALJMP ;Scan flag.
JMP SCAN ;Scan switches.
CALJMP: JMP GETJSW
CKJSC:
;Activity check.
CKACT: MOVRI K,OCMD
MOVMA K
XORR CMD ;A ← CMD .XOR. OCMD.
JNZ ACT
MOVRI K,OCMD1 ;Old alfa index.
MOVMA K
XORR CMD1
JNZ ACT
SRB1 ;Select ram bank 1.
MOVRA SW0
JNZ RACT
MOVRA SW1
JNZ RACT
MOVRA SW2
ANI 77 ;Mask out JS and P/O bits.
JNZ RACT
MOVRI P,SPD ;Now pot index.
MOVRI O,OSPD ;Old pot index.
MOVMA P ;Check speed.
XORM O
JZ CKJP
RACT: SRB0 ;Select ram bank 0.
ACT: JMP ACTIVE
CKJP:
SRB0 ;Select ram bank 0.
CLRA ;Blank message index.
JF1S ADPY ;Check if alfa off.
JMP OBITS ;Not active.
RSTRAM: SRB0 ;Select ram bank 0.
ACTIVE: MOVRA CMD ;OLD ← NEW.
MOVRI K,OCMD
MOVAM K ;OCMD.
MOVRA CMD1
INCR K
MOVAM K ;OCMD1.
MOVRI P,SPD
MOVRI O,OSPD
MOVMA P ;A ← SPD.
MOVAM O ;OSPD ← A.
CLRF1 ;Alfa led off flag ← 0.
MOVRI OFFH,10 ;OFFW ← tOWAIT.
MOVRA CMD1 ;Update alfa leds.
SWAP ;Shift etc.
ANI 360 ;For 16 messages.
ADPY: CALL OALFA ;Output message.
OBITS: MOVRI CMD1,0 ;Init check sum.
MOVRI I,SW0 ;Point to out bytes.
MOVRI CMD,11 ;# of output bytes.
OUTL: MOVMA I ;Get output byte.
CALL OBYTE
ADR CMD1 ;Add it to cksum.
MOVAR CMD1
INCR I
DJNZ CMD,OUTL
MOVRA CMD1
CPLA
INCA
CALL OBYTE ;Output check sum.
JMP INWAI ;Loop back to input wait.
; Output Acc. to SI/O line
OBYTE: MOVRI K,11 ;# of bits -1
CLRC
ROLC ;Start bit
OLOOP: OUTP TT ;Output bit
RORC
MOVRI N,TBIT-3 ;TBIT - Itime.
OWAIT: DJNZ N,OWAIT
DJNZ K,OLOOP
ORPI TT,377 ;Stop bit.
MOVRI N,TBIT-10 ;TBIT - Itime.
SWAIT: DJNZ N,SWAIT
RORC
RET
WLED: OUTB ;Latch A on bus.
MOVI 7 ;NOT led E bit.
ANPA JS ;NOT E.
CPLA
ORPA JS ;E.
RET
;Clear leds
CLED: MOVRI N,370
MOVRA N ;Setup regs.
CLRL: CALL WLED ;Clear led loop.
INCR N ;Next led.
MOVRA N
JNZ CLRL
RET
;Convert channel and wait.
CONVRT: ORPI S,100 ;STRT.
ANPI S,277 ;NOT STRT.
MOVI =22 ;=172 micro seconds?
CONL: DECA ;Convert wait.
JNZ CONL
MOVXMA K ;Get A/D output.
MOVXMA K ;Twice for bus unlatch.
OUTB ;Latch bus for output.
RET
;Alfa led output routines.
CALED: CLRA ;Blank string index.
OALFA: MOVAR I ;Save string index.
MOVI 376 ;NOT CE0.
CENBL: MOVRI N,4 ;# of chrs in I.C.
MOVAR K ;Save CE.
MOVAX CEW ;NOT CE.
CHRL: MOVRA I
MOVP3 ;A ← String(chr).
OUTB ;Latch bus output.
MOVI 367
ANPA CEW ;NOT W.
CPLA
ORPA CEW ;W
INCR I ;CHR ← CHR+1.
DJNZ N,CHRL
MOVRA K
ROL ;Next CE.
JBS 3,CENBL
ORPA CEW ;CE.
RET
; Bit spreading table
LOC 1000 ;1000 = Start of page two.
125 ↔ 124 ↔ 121 ↔ 120 ↔ 105 ↔ 104 ↔ 101 ↔ 100
25 ↔ 24 ↔ 21 ↔ 20 ↔ 5 ↔ 4 ↔ 1 ↔ 0
SBITS ← 60 ;Scan bits.
ROW0 ← 357 ;Scan row 0.
ROW1 ← 337 ;Scan row 1.
SCAN: SRB1 ;Select ram bank 1.
CPLF0 ;Reset scan flag.
ORPI S,SBITS ;Turn off rows
ANPI S,ROW0 ;Enable row 0.
INP TT ;Scan row 0
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPD ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPD
MOVAR SW1
ORPI S,SBITS ;Turn off row 0.
ANPI S,ROW1 ;Enable row 1.
INP TT ;Scan row 1
ORPI S,SBITS ;Disable scan.
MOVAR SW2 ;Save row 1
ANI 17 ;Low nibble
MOVPD
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
MOVRA SW2 ;Get row 1 again
SWAP
ANI 17
MOVPD
ROL
ORR SW1
MOVAR SW1
MOVXA PBL ;Get push buttons.
MOVAR SW2 ;Save low nibble.
MOVXA PBH
SWAP ;High nibble.
ORR SW2
CPLA
MOVAR SW2
ANI 77 ;Zero JS and P/O bits.
XCHR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
GETJSW: MOVRI P,P1
MOVRI K,0
MOVRI N,4
RCAL: MOVMA P ;A ← CAL POT.
ROLC
MOVRA K
ROLC
MOVAR K
INCR P ;P ← P + 2.
INCR P
DJNZ N,RCAL
MOVRI P,P2
MOVRI O,P1
MOVRI N,3
CALMP: MOVMA P
MOVAM O
INCR P ;P ← P + 2.
INCR P
INCR O
DJNZ N,CALMP
MOVRI P,JW0
MOVRA K
MOVAM P ;JW0 ← CAL SIGN BITS.
SRB0 ;Select ram bank 0.
JMP CKJSC
;Alfa led message table.
LOC 1400 ;Start of page three.
(" "∧77)∨300 ↔ (" "∧77)∨200 ↔ (" "∧77)∨100
" "∧77 ↔ (" "∧77)∨300 ↔ (" "∧77)∨200
(" "∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "1"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "2"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "3"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "4"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "5"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "6"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "7"∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
" "∧77 ↔ ("C"∧77)∨300 ↔ ("L"∧77)∨200
("O"∧77)∨100 ↔ "S"∧77 ↔ ("E"∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
" "∧77 ↔ ("F"∧77)∨300 ↔ ("A"∧77)∨200
("R"∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("E"∧77)∨200 ↔ ("A"∧77)∨100
"C"∧77 ↔ ("H"∧77)∨300 ↔ (" "∧77)∨200
("M"∧77)∨100 ↔ "O"∧77 ↔ ("D"∧77)∨300
("E"∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("M"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("N"∧77)∨100
"U"∧77 ↔ ("A"∧77)∨300 ↔ ("L"∧77)∨200
(" "∧77)∨100 ↔ "M"∧77 ↔ ("O"∧77)∨300
("D"∧77)∨200 ↔ ("E"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("N"∧77)∨300 ↔ ("O"∧77)∨200 ↔ (" "∧77)∨100
"H"∧77 ↔ ("I"∧77)∨300 ↔ ("G"∧77)∨200
("H"∧77)∨100 ↔ " "∧77 ↔ ("P"∧77)∨300
("W"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("P"∧77)∨300 ↔ ("R"∧77)∨200 ↔ ("O"∧77)∨100
"G"∧77 ↔ (" "∧77)∨300 ↔ ("R"∧77)∨200
("U"∧77)∨100 ↔ "N"∧77 ↔ ("N"∧77)∨300
("I"∧77)∨200 ↔ ("N"∧77)∨100 ↔ "G"∧77
0 ↔ 0 ↔ 0 ↔ 0
("R"∧77)∨300 ↔ ("U"∧77)∨200 ↔ ("N"∧77)∨100
" "∧77 ↔ ("H"∧77)∨300 ↔ ("O"∧77)∨200
("L"∧77)∨100 ↔ "D"∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("F"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("T"∧77)∨100
"A"∧77 ↔ ("L"∧77)∨300 ↔ (" "∧77)∨200
("E"∧77)∨100 ↔ "R"∧77 ↔ ("R"∧77)∨300
("O"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
LOC 2272
0 ;This is for a block of zeros
END